package com.facade;

import java.io.Serializable;
import java.util.List;

import com.dao.FuncionarioDAO;
import com.dao.RegistroDAO;
import com.model.Funcionario;
import com.model.Registro;

public class FuncionarioFacade implements Serializable {
	private static final long serialVersionUID = 1L;

	private FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
	private RegistroDAO registroDAO = new RegistroDAO();

	public void criarFuncionario(Funcionario funcionario) {
		funcionarioDAO.beginTransaction();
		funcionarioDAO.save(funcionario);
		funcionarioDAO.commitAndCloseTransaction();
	}

	public void atualizarFuncionario(Funcionario funcionario) {
		funcionarioDAO.beginTransaction();
		Funcionario persistedFuncionario = funcionarioDAO.find(funcionario.getId());
		persistedFuncionario.setNome(funcionario.getNome());
		persistedFuncionario.setIdentificacao(funcionario.getIdentificacao());
		funcionarioDAO.commitAndCloseTransaction();
	}

	public void deletarFuncionario(Funcionario funcionario) {
		funcionarioDAO.beginTransaction();
		Funcionario persistedFuncSomenteComId = funcionarioDAO
				.findReferenceOnly(funcionario.getId());
		funcionarioDAO.delete(persistedFuncSomenteComId);
		funcionarioDAO.commitAndCloseTransaction();
	}

	public Funcionario findFuncionario(int funcionarioId) {
		funcionarioDAO.beginTransaction();
		Funcionario funcionario = funcionarioDAO.find(funcionarioId);
		funcionarioDAO.closeTransaction();
		return funcionario;
	}

	public List<Funcionario> listAll() {
		funcionarioDAO.beginTransaction();
		List<Funcionario> result = funcionarioDAO.findAll();
		funcionarioDAO.closeTransaction();
		return result;
	}

	public List<Funcionario> getAll() {
		funcionarioDAO.beginTransaction();
		List<Funcionario> result = funcionarioDAO.getAll();
		funcionarioDAO.closeTransaction();
		return result;
	}
	
	public Funcionario acharFuncComTodosRegistros(int funcionarioId) {
		funcionarioDAO.beginTransaction();
		Funcionario funcionario = funcionarioDAO
				.acharFuncComTodosRegistros(funcionarioId);
		funcionarioDAO.closeTransaction();
		return funcionario;
	}
	
	public Funcionario acharFuncPelaIdentificacao(String funcIdentificacao) {
		funcionarioDAO.beginTransaction();
		Funcionario funcionario = funcionarioDAO
				.acharFuncPelaIdenficacao(funcIdentificacao);
		funcionarioDAO.closeTransaction();
		return funcionario;
	}

	public void addRegistroAoFunc(int registroId, int funcionarioId) {
		funcionarioDAO.beginTransaction();
		registroDAO.joinTransaction();
		Registro registro = registroDAO.find(registroId);
		Funcionario funcionario = funcionarioDAO.find(funcionarioId);
		funcionario.getRegistros().add(registro);
		/*registro.getFuncionario().add(funcionario);*/
		funcionarioDAO.commitAndCloseTransaction();
	}

	public void removerRegistroDoFunc(int registroId, int funcionarioId) {
		funcionarioDAO.beginTransaction();
		registroDAO.joinTransaction();
		Registro registro = registroDAO.find(registroId);
		Funcionario funcionario = funcionarioDAO.find(funcionarioId);
		funcionario.getRegistros().remove(registro);
		/*registro.getFuncionario().remove(funcionario);*/
		funcionarioDAO.commitAndCloseTransaction();
		RegistroFacade registroFacade = new RegistroFacade();
		registroFacade.deletarRegistro(registro);
	}
}